package com.example.windowdemo.window.flyweight;

import android.content.Context;
import android.view.View;
import android.view.WindowManager;

/**
 * @author: njb
 * @date: 2023/8/3 15:26
 * @desc:
 */
public class FlyweightWindow {
    private String tag;
    private boolean isFullScreen;
    private boolean hasTitleBar;
    private int width;
    private int height;
    private View contentView;
    private WindowManager.LayoutParams layoutParams;

    public FlyweightWindow() {
        this.layoutParams = new WindowManager.LayoutParams();
    }

    public void setTag(String tag) {
        this.tag = tag;
    }

    public void setFullScreen(boolean isFullScreen) {
        this.isFullScreen = isFullScreen;
        if (isFullScreen) {
            layoutParams.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
        } else {
            layoutParams.flags &= WindowManager.LayoutParams.FLAG_FULLSCREEN;
        }
    }

    public void setTitleBar(boolean hasTitleBar) {
        this.hasTitleBar = hasTitleBar;
        if (hasTitleBar) {
            layoutParams.flags &= ~WindowManager.LayoutParams.FLAG_FULLSCREEN;
        } else {
            layoutParams.flags |= WindowManager.LayoutParams.FLAG_FULLSCREEN;
        }
    }

    public void setSize(int width, int height) {
        this.width = width;
        this.height = height;
        layoutParams.width = width;
        layoutParams.height = height;
    }

    public void setPosition(int x, int y) {
        layoutParams.x = x;
        layoutParams.y = y;
    }

    public void setGravity(int gravity) {
        layoutParams.gravity = gravity;
    }

    public void setContentView(View view) {
        this.contentView = view;
    }

    public void show(Context context) {
        WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        windowManager.addView(contentView, layoutParams);
    }

    public void hide(Context context) {
        WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
        windowManager.removeView(contentView);
    }

    public void onDetachedFromWindow() {
        contentView = null;
    }
}
